package controllers;

import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import models.Kategori;
import system.Controller;

/**
 *
 * @author Rezan Achmad
 */
@WebServlet(name = "KategoriController", urlPatterns = {"/kategori", "/kategori/add", "/kategori/update", "/kategori/delete"})
public class KategoriController extends Controller {

    @Override
    protected void initRules() {
        rules.put("/kategori", identity.isAdmin());
        rules.put("/kategori/add", identity.isAdmin());
        rules.put("/kategori/update", identity.isAdmin());
        rules.put("/kategori/delete", identity.isAdmin());
    }
    
    @Override
    protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String userPath = request.getServletPath();

        if (userPath.equals("/kategori")) {
            actionIndex(request, response);
        } else if (userPath.equals("/kategori/add")) {
            actionAdd(request, response);
        } else if (userPath.equals("/kategori/update")) {
            actionUpdate(request, response);
        } else if (userPath.equals("/kategori/delete")) {
            actionDelete(request, response);
        }
    }

    private void actionIndex(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // Get all kategori
        List<Kategori> listKategori = Kategori.getAll();

        // Set kategori list to request attribute
        request.setAttribute("listKategori", listKategori);

        // Set view
        setView("/kategori/index", request, response);
    }

    private void actionAdd(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // Create empty kategori object
        Kategori kategori = new Kategori();

        if (isPost) {
            // Set all attribute
            kategori.nama = request.getParameter("nama");
            kategori.deskripsi = request.getParameter("deskripsi");

            // Add
            if (kategori.add()) {
                // Redirect to kategori index
                response.sendRedirect(request.getContextPath() + "/kategori");
                return;
            }
        }
        
        // Set kategori object to request attribute
        request.setAttribute("kategori", kategori);

        // Set view
        setView("/kategori/add", request, response);
    }

    private void actionUpdate(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // Get kategori id
        String id = request.getParameter("id");

        // Get kategori object
        Kategori kategori = Kategori.get(Integer.parseInt(id));

        // Set kategori object to request attribute
        request.setAttribute("kategori", kategori);

        if (isPost) {
            // Set all attribute
            kategori.nama = request.getParameter("nama");
            kategori.deskripsi = request.getParameter("deskripsi");

            // Update
            if (kategori.update()) {
                response.sendRedirect(request.getContextPath() + "/kategori");
                return;
            }
        }

        // Set view
        setView("/kategori/update", request, response);
    }

    private void actionDelete(HttpServletRequest request, HttpServletResponse response) throws IOException {
        // Get kategori id
        String id = request.getParameter("id");

        // Delete
        Kategori.delete(Integer.parseInt(id));

        // Redirect
        response.sendRedirect(request.getContextPath() + "/kategori");
    }
}
